package com.miniapp.entity;

import cn.hutool.core.util.DesensitizedUtil;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * @author author
 * @date 2025-09-01 9:57
 */
@Data
@TableName("t_user") // 对应数据库表名
public class User {

    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 微信openid
     */
    private String openId;

    /**
     * 微信unionid（多小程序共用）
     */
    private String unionId;

    /**
     * 用户名
     */
    private String username;

    /**
     * 密码（加密存储）
     */
    private String password;

    /**
     * 手机号（AES加密存储）
     */
    // 手机号（使用AES加密存储）
//    @TableField(typeHandler = AesTypeHandler.class)  // 使用MyBatis类型处理器
    private String phone;

    /**
     * 脱敏手机号（中间四位用*代替，用于展示）
     */
    private String phoneMasked;

    /**
     * 用户头像URL
     */
    private String avatarUrl;

    /**
     * 用户角色：ADMIN-管理员，USER-普通用户
     */
    private String role;

    /**
     * 微信登录session_key
     */
    @TableField(select = false)  // 查询时不返回该字段
    private String sessionKey;

    /**
     * 最后登录时间
     */
    private LocalDateTime lastLoginTime;

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    private LocalDateTime updateTime;

    /**
     * 设置手机号时自动处理脱敏
     */
    public void setPhone(String phone) {
        this.phone = phone;
        // 使用Hutool工具类处理手机号脱敏
        if (phone != null && !phone.isEmpty()) {
            this.phoneMasked = DesensitizedUtil.mobilePhone(phone);
        }
    }
}

